#include<iostream>
using namespace std;
#include"stdTcpService.h"
#include<pthread.h>
#include<unistd.h>
#include<json-c/json.h>
#include"threadPool.h"
#include"messageHandler.h"
void *thread_func(void *arg)
{     
      /*线程分离*/
      pthread_detach(pthread_self());
       // 将裸指针转换为 std::shared_ptr
    StdTcpSocket* clientSockPtr = reinterpret_cast<StdTcpSocket*>(arg);
    std::shared_ptr<StdTcpSocket> clientSock(clientSockPtr);  // 确保生命周期管理
      
       std::string data;
       int readBytes=0;
       MessageHandle msgHandle(clientSock.get());
       while(1)
       {
         /*清空数据*/
         data.clear();
         /*接受客户端信息*/
        readBytes=clientSock->receMessage(data);
        if(readBytes<0)
        {
            break;
        }
        else if(readBytes==0)
        {
            cout<<"客户端下线"<<endl;
            break;
        }
       else
       {
           msgHandle.hanldeMessage(data);
       }
        
      sleep(20);
  }
     return NULL;
}



int main()
{
   /*创建线程池*/
   ThreadPool pool(3,6,10);

     StdTcpService server;

     /*设置监听*/

     server.setListen(8080);

   std::cout<<"等待客户端连接"<<endl;
     while(1)
     {
       std::shared_ptr<StdTcpSocket> clientSock=server.getClientSock();
      /*程序到这个地方，就意味着有客户端连接了*/ 
      // /*创建线程*/
      // pthread_t tid;
      // int ret=pthread_create(&tid,NULL,thread_func,clientSock.get()); // 传递裸指针
      // if(ret==-1)
      // {
      //    perror("thread create error:");
      //    exit(-1);
      // }
      /*休眠1s*/
       pool.addTask(thread_func,clientSock.get());
        sleep(1);
     }

    return 0;
}